<?php

class PrestacionBrindadaController extends Controller
{
	/**
	 * @var string the default layout for the views. Defaults to '//layouts/column2', meaning
	 * using two-column layout. See 'protected/views/layouts/column2.php'.
	 */
	public $layout='//layouts/column2';

	/**
	 * @return array action filters
	 */
	public function filters()
	{
		return array(
			'accessControl', // perform access control for CRUD operations
			'postOnly + delete', // we only allow deletion via POST request
		);
	}

	/**
	 * Specifies the access control rules.
	 * This method is used by the 'accessControl' filter.
	 * @return array access control rules
	 */
	public function accessRules()
	{
		return array(
			array('allow',  // allow all users to perform 'index' and 'view' actions
				'actions'=>array('index','view'),
				'users'=>array('*'),
			),
			array('allow', // allow authenticated user to perform 'create' and 'update' actions
				'actions'=>array('create','update'),
				'users'=>array('@'),
			),
			array('allow', // allow admin user to perform 'admin' and 'delete' actions
				'actions'=>array('admin','delete','debitar','listadoEmitePrestacion','emitirPrestacion','volcarNomenclador'),
				'users'=>array('admin'),
			),
			array('deny',  // deny all users
				'users'=>array('*'),
			),
		);
	}
        
        
        
        /**
	 * Returns the data model based on the primary key given in the GET variable.
	 * If the data model is not found, an HTTP exception will be raised.
	 * @param integer the ID of the model to be loaded
	 */
	public function loadModel($id)
	{
		$model=PrestacionBrindada::model()->findByPk($id);
		if($model===null)
			throw new CHttpException(404,'The requested page does not exist.');
		return $model;
	}
        
	/**
	 * Performs the AJAX validation.
	 * @param CModel the model to be validated
	 */
	protected function performAjaxValidation($model)
	{
		if(isset($_POST['ajax']) && $_POST['ajax']==='prestacion-brindada-form')
		{
			echo CActiveForm::validate($model);
			Yii::app()->end();
		}
	}
        
        /*******************************************************************/
        /*******************************************************************/
        /*******************************************************************/
        
         /* LISTADO DE BENEFICIARIO PARA BRINDAR PRESTACION */
        public function actionListadoEmitePrestacion()
	{
            $this->layout = '//layouts/column1';
            
            try{ 
                //obtenemos el tipo de prestacion a brindar, si es de alta complejiddad o comun
                $tipoPrestacion = $_GET['tpres'];
                
                
                if (($tipoPrestacion == 1) || ($tipoPrestacion == '1'))
                     $_SESSION['alta-com'] = 1;
                else
                     $_SESSION['alta-com'] = 0;
                
                
               
                $modelBeneficiarios = new Sumar('search');   
                $modelBeneficiarios->unsetAttributes();
                
                $modelPersona =  new Persona('search'); 
                $modelPersona->unsetAttributes();  
                
                if(isset($_GET['Sumar'])){
                    $modelBeneficiarios->attributes=$_GET['Sumar'];
                }
                
                if(isset($_GET['Persona'])){
                    $modelPersona->attributes=$_GET['Persona'];
                }
          
		$this->render('brindarPrestacion',array(			
                        'modelBeneficiarios'=>$modelBeneficiarios,
                        'tipoPrestacion'=>$tipoPrestacion,
                        'modelPersona'=>$modelPersona                        
		));
             }
             catch(CDbException $e)
             {

                if(!isset($_GET['ajax']))
                    Yii::app()->user->setFlash('error','ERROR!!! No se puedo eliminar!!!');
                else
                    echo "<div class='flash-error'> ERROR!!! No se puedo eliminar!!!</div>"; //for ajax
            }                
	}
        
        
         /**
	 * Creates a new model.
	 * If creation is successful, the browser will be redirected to the 'view' page.
	 */
        
        /*  OK  */
	public function actionEmitirPrestacion()
	{ 
         $transaction = Yii::app()->db->beginTransaction(); 
         
         try
          {
             $model = new PrestacionBrindada;  
             $tpres = 0; //tipo de prestacion
           
            if ((isset($_GET['idbeneficiario'])) && (!empty($_GET['idbeneficiario']))){  
            //buscamos los datos del beneficiario            
               $modelBeneficiario = Sumar::model()->find('id_persona='. $_GET['idbeneficiario']);
              
             
               if(isset($_POST['PrestacionBrindada'])){	
                    //buscamos el id de la prestacionPermitida
                    if ( (!empty($_POST['patologia'])) && (!empty($_POST['objetoprestacion'])) ){
                        $id_patologia_prestacionreal =  explode('-/-',$_POST['patologia']);  
                        $id_patologia      = $id_patologia_prestacionreal[0];
                        $id_prestacionreal = $id_patologia_prestacionreal[1];
                        
                       
                        $id_prestacion = (int) $_POST['objetoprestacion'];

                     

                        
                        $data = PrestacionesPermitidas::model()->findByPk($id_prestacionreal);
                        if (!empty($data)){
                            $idPrestacionPermitida = $data->id;
                            $precio = $data->precio;
                            $cantPrestacion_x_dia = $data->cant_dias; 
                            $cantPrestacion_x_mes = $data->cant_mes;
                            $cantPrestacion_x_anio =  $data->cant_anios;
                        }                        
                    }
                    
                    $fechas = $_POST['PrestacionBrindada']['fecha_prestacion'];
                    $benef = $modelBeneficiario->id_persona;
                    $presEfectuadasAnio = PrestacionBrindada::model()->PrestacionesTomadasAnio($fechas,$benef, $idPrestacionPermitida);
                    $presEfectuadasMes  = PrestacionBrindada::model()->PrestacionesTomadasMes($fechas,$benef, $idPrestacionPermitida);
                    $presEfectuadasDia  = PrestacionBrindada::model()->PrestacionesTomadasDia($fechas,$benef, $idPrestacionPermitida);
                    

               	    if ($presEfectuadasDia >= $cantPrestacion_x_dia){
                             $transaction->rollBack();                                   
                             Yii::app()->user->setFlash('resultado_carga','ERROR!!! No se puede cargar la prestacion. Ya se superaron la cantidad permitida efectuadas en el dia');
                             $this->redirect(array('emitirPrestacion','idbeneficiario'=>$modelBeneficiario->id_persona)); 
                    }
                     if ($presEfectuadasMes >= $cantPrestacion_x_mes){
                             $transaction->rollBack();                                   
                             Yii::app()->user->setFlash('resultado_carga','ERROR!!! No se puede cargar la prestacion. Ya se superaron la cantidad permitida efectuadas en el mes');
                             $this->redirect(array('emitirPrestacion','idbeneficiario'=>$modelBeneficiario->id_persona)); 
                    } 
                     if ($presEfectuadasAnio >= $cantPrestacion_x_anio){
                             $transaction->rollBack();                                   
                             Yii::app()->user->setFlash('resultado_carga','ERROR!!! No se puede cargar la prestacion. Ya se superaron la cantidad permitida efectuadas en el anio');
                             $this->redirect(array('emitirPrestacion','idbeneficiario'=>$modelBeneficiario->id_persona)); 
                    } 
                        $model->id_prestaciontomada  = $idPrestacionPermitida;
                        $model->id_beneficiario = $modelBeneficiario->id_persona;                       
                        $model->fecha_prestacion = $_POST['PrestacionBrindada']['fecha_prestacion'];
                        $model->fecha_carga = date('d-m-Y');
                        $model->id_efector = $_POST['PrestacionBrindada']['id_efector']; 
                        $model->debitado = '0'; 
                        $model->monto = $precio;
                        $isvalid_prestacion = $model->validate();
                        
			if($isvalid_prestacion){
                            $model->save();                           
                        
                            if (isset($_SESSION['TrazadoraNino'])){ 
                                $modelTrazadoraNino = new Nino;
                                $modelTrazadoraNino = $_SESSION["TrazadoraNino"];                            
                                $modelTrazadoraNino->id_prestacion = $model->id;
                                $modelTrazadoraNino->fecha_control = $_POST['PrestacionBrindada']['fecha_prestacion'];
                                        
                                $isvalid = $modelTrazadoraNino->validate(); 
                              
                                   if ($isvalid){                                  
                                      $modelTrazadoraNino->save();
                                      unset($_SESSION["TrazadoraNino"]);
                                   }     
                            }      
                             $transaction->commit();                                   
                             Yii::app()->user->setFlash('resultado_carga','La Prestacion se Cargo Correctamente!!!');
                             $this->redirect(array('emitirPrestacion','idbeneficiario'=>$modelBeneficiario->id_persona)); 
                        }
                         else
                        {
                            $transaction->rollBack(); 
                            $d = "";
                            foreach ($model->getErrors() as $key => $value) {
                                $d .= " <br>  " . $key . "  -  " . $value;
                            }
                         
                            Yii::app()->user->setFlash('resultado_carga','ERROR!! La Prestacion no se pudo  Cargar!!!' .$d  );
                            $this->redirect(array('emitirPrestacion','idbeneficiario'=>$modelBeneficiario->id_persona));  
                        }    
                }     
		
                
                

                  
                        //armamos un dataprovider con las prestaciones brindadas al beneficiario
                        //para ello debemos vincularla con las tablas correcpondientes para
                        //mostrar los codigos de las prestaicones y demas
                        $criteria = new CDbCriteria;  
                        $criteria->condition='id_beneficiario=:benef';
                        $criteria->params=array(':benef'=>$_GET['idbeneficiario']);
                        $criteria->order = 'fecha_prestacion DESC';
           
                        $dataProvider = new CActiveDataProvider('PrestacionBrindada', array(
                            'criteria'=>$criteria,
		));
                
                
		$this->render('create',array(
			'model'=>$model,
                        'modelBeneficiario'=>$modelBeneficiario,
                        'dataProviderPrestaciones'=>$dataProvider,
                        'tpres'=>$tpres
                        
		));
            }
            else{
                Yii::app()->user->setFlash('error','Se ha producido un Error en la Carga POR FAVOR intente Nuevamente!!! <br /> ' . $e);
                $transaction->rollBack();  
                $this->redirect(array('prestacionBrindada/ListadoEmitePrestacion', 'tpres'=>'0'));
             }   
          }
          catch(Exception $e){  
                Yii::app()->user->setFlash('error','Se ha producido un Error en la Carga POR FAVOR intente Nuevamente!!! <br /> ' . $e);
                $transaction->rollBack();
                $this->redirect(array('prestacionBrindada/ListadoEmitePrestacion', 'tpres'=>'0'));
          }   
	} //FIn del EmitirPrestaicon
        
        
          /*
         * Funcion que es llamada mediante ajax por peticion de un cambio en la fecha 
         * de la prestacion en el formulario de emision de prestaciones.
         * 
         * A traves de dicha fecha chquea cual es el nomenclador vigente para la fecha de la prestacion.
         * Segun este nomenclador, buscamos las prestaciones asociadas y permitidas para facturar.
         * Ademas solo listara las prestaciones asociadas del grupo etareo al que corresponde el beneficiario
         * 
         */
        public function actionVolcarNomenclador(){
          if ( ((isset($_POST["fechaprestacion"])) && (!empty($_POST["fechaprestacion"]))) &&
                ((isset($_POST["idbenef"])) && (!empty($_POST["idbenef"])))){
                
                 //array que contendra los resultados del nomenclador de categorias al momento d ela fecha de la prestacion
          
                $resultado = array();
                $fechaPrestacion = $_POST["fechaprestacion"];             
                $id_beneficiario = (int) $_POST["idbenef"];
            
                $beneficiario = Sumar::model()->find('id_persona = ' . $id_beneficiario);
                
                $enviado =    $beneficiario->estado_envio;
                $embarazo =  $beneficiario->embarazada;
                
                    //poner aca la logica de embarazo
                if (($beneficiario->embarazada == '1') || ($beneficiario->embarazada == 1))
                     $resultado["embarazo"] = 1;
                else
                     $resultado["embarazo"] = 0;
                    
                $fechaMenorEtareo = $beneficiario->MiPersona->fecha_nacimiento;
                $fechaMayorEtareo = $fechaPrestacion;
            
            //buscamos el grupo etareo al que pertenece el beneficiario al momento y fecha d ela prestacion.
            $idGrupoPatologico = $beneficiario->DevolverGrupoEtareoID($fechaMenorEtareo,$fechaMayorEtareo);                                 
            $GrupoPatologico = $beneficiario->DevolverGrupoEtareo($fechaMenorEtareo,$fechaMayorEtareo);
            
           
            
            $fechaPrestacion1 = Sumar::convertirFormatoFecha($fechaPrestacion);
            
            $criteria = new CDbCriteria; 
            $criteria->condition = "(fecha_inicio <= '" . $fechaPrestacion1 ."' and fecha_fin >= '" . $fechaPrestacion1 ."') and id_tiponomenclador=1 and vigente='1'";
              
            $nomencladorUsado = Nomenclador::model()->find($criteria);
            
            if (!empty($nomencladorUsado)){
                $criteriaPrestaciones =  new CDbCriteria; 
                $criteriaPrestaciones->condition = "(tema LIKE '%PRESTACION%' and tema NOT LIKE '%OBJETO%' ) and id_nomenclador = " . $nomencladorUsado->id;
                $criteriaPrestaciones->order = 'codigo ASC';
                
                $misPrestaciones = CategoriaPrestaciones::model()->findAll($criteriaPrestaciones);
                $options = "<option value='-1'> Seleccione Categoria Prestacion </options>";
                
              
                foreach($misPrestaciones as $prestacion){
                   $options .=     "<option value='".$prestacion->id."'>".$prestacion->codigo ."  -  " .$prestacion->descripcion  ."</options>";
                 }
                   $resultado["opciones"] = $options;
            } //fin del (!empty($nomencladorUsado))   
            else{
                $options = "<option value='-1'> NO EXISTE NOMENCLADOR A SER UTILIZADO </options>"; 
                $resultado["opciones"] = $options;
                }
                
                
             $resultado["categoria"] =  $idGrupoPatologico;
             $resultado["grupo"] =  $GrupoPatologico;
             
             $resultado["nomenclador"] = $nomencladorUsado->id;   
             echo CJSON::encode(
                      $resultado 
                  );               
             exit;      
         }
        } // FIN DEL VOLCARNOMENCLADOR
        
        
         /*
        * Funcion especifica para debitar la prestacion.
        * 
        * A traves de una peticion ajax se recibe como primer llamado; despliega el formulario de carga de debitos;
        * y como consecuencia debita la prestacion, con su monto.
        */
       public function actionDebitar()
       {
        $transaction = Yii::app()->db->beginTransaction(); 
         
        try{
           if (!empty($_POST["id"])){
              $id = (int) $_POST["id"]; }
          
           if(!empty($_POST['PrestacionBrindada']['id'])){
              $id = $_POST['PrestacionBrindada']["id"];             
           }
           
           $model = $this->loadModel($id);
           $model->scenario = 'debitando';
          
          if( isset( $_POST['PrestacionBrindada'] ) )
          {   $model->debitado = 1;
              $model->motivo_debito = $_POST['PrestacionBrindada']['motivo_debito'];
              $model->monto_debitado = $_POST['PrestacionBrindada']['monto_debitado'];
          
                if( $model->save() )
                { $transaction->commit();
                if( Yii::app()->request->isAjaxRequest )
                {
                    // Stop jQuery from re-initialization
                    Yii::app()->clientScript->scriptMap['jquery.js'] = false;

                    echo CJSON::encode( array(
                    'status' => 'success',
                    'div' => 'ModelName successfully updated',
                    ));
                    exit;
                }
                else
                    $this->redirect( array( 'view', 'id' => $model->id ) );
                }
            }
 
            if (Yii::app()->request->isAjaxRequest)
            { // Stop jQuery from re-initialization
                Yii::app()->clientScript->scriptMap['jquery.js'] = false;
                $transaction->commit();
                echo CJSON::encode(array(
                    'status'=>'formulario', 
                    'div'=>$this->renderPartial('_FormDebitos', array('model'=>$model), true)));               
                    exit;               
            }
        }
        catch(Exception $e){  
                Yii::app()->user->setFlash('error','Se ha producido un Error en la Carga POR FAVOR intente Nuevamente!!! <br /> ' . $e);
                $transaction->rollBack();
                $this->redirect(array('nomenclador/misNomencladores')); 
          }       
        
      } // FIN DEL ACTION DEBITAR
      
       
       
        
	
        
        
        
        
}
